package cn.kgc.tangcco;

import org.junit.Test;

import java.io.*;

/**
 * @author 李昊哲
 * @Description
 * @date 2020/8/12 10:31
 */
public class Demo11 {
    @Test
    public void test01() {
        // & 前后两端不是表达式而是值的时候 则代表 按位与
        // 按位与 二进制相同位置上全为1结果为1 只要一个为0则结果为0
        System.out.println(3 & 7);
    }

    @Test
    public void test02() {
        // | 前后两端不是表达式而是值的时候 则代表 按位或
        // 按位与 二进制相同位置上只要有一个为1结果为1 相同位置的值全为0的时候结果为0
        System.out.println(3 | 7);
    }

    @Test
    public void test03() {
        // ^ 前后两端不是表达式而是值的时候 则代表 按位异或
        // 按位异或 二进制相同位置上一个值为1而另外一个值为0的时候结果为1 否则结果为0
        System.out.println(3 ^ 7);
    }

    @Test
    public void test04() {
        // 按位异或 一个值按位异或一个参考值 得到的结果再次按位一个这个相同的参考值得到原来的值
        System.out.println(3 ^ 7);
    }

    @Test
    public void test05() {
        InputStream in = null;
        OutputStream out = null;
        try {
            in = new FileInputStream("src/main/resources/01.jpg");
            out = new FileOutputStream("src/main/resources/02.jpg");
            int read = -1;
            while ((read = in.read()) != -1) {
                read = read ^ 123;
                out.write((char) read);
            }
            out.flush();
            System.out.println("加密完成");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test06() {
        InputStream in = null;
        OutputStream out = null;
        try {
            in = new FileInputStream("src/main/resources/02.jpg");
            out = new FileOutputStream("src/main/resources/03.jpg");
            int read = -1;
            while ((read = in.read()) != -1) {
                read = read ^ 123;
                out.write((char) read);
            }
            out.flush();
            System.out.println("解密完成");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
